package com.lanchetech.bean.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.concurrent.TimeUnit;

/**
 * @author Created by wql on 2020/5/29.
 * @title 用于实现分布式锁
 */
@Component
public final class RedisUtils {

//    @Autowired
//    private RedisTemplate<String, String> redisTemplate;
//
//    /**
//     * 获取锁
//     *
//     * @param lockKey   锁的key
//     * @param requestId 锁的value
//     * @param timeUnit  锁的过期单位
//     * @param timeOut   锁的过期时间
//     * @return 是否获取到锁
//     */
//    public boolean tryLock(String lockKey, String requestId, Long timeOut, TimeUnit timeUnit) {
//        Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, timeOut, timeUnit);
//        return result != null && result;
//    }
//
//    /**
//     * 释放锁
//     *
//     * @param lockKey   锁的key
//     * @param requestId 锁的value
//     */
//    public void releaseLock(String lockKey, String requestId) {
//        String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
//        redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), Collections.singletonList(lockKey), requestId);
//    }

//    public static void main(String[] args) {
//        String s = UUID.randomUUID().toString();
//        try {
//            boolean key = tryLock("key", s, 120L, TimeUnit.SECONDS);
//            if (key) {
//                System.out.println("执行业务逻辑");
//            }
//        } catch (Exception e) {
//            System.out.println(e);
//        } finally {
//            releaseLock("kye", s);
//        }
//    }
}
